robocopy 來源資料夾 目的地資料夾 檔名 選項
robocopy C:\a.txt D:\backup
robocopy會認為C:\a.txt是個資料夾
如果沒有找到C:\a.txt資料夾,會報錯
robocopy C:\src D:\backup
如果D:\backup不存在,會自動建立資料夾
rem 路徑有空格,需要加雙引號
rem 反斜線 + 雙引號 \" 會導致錯誤
robocopy "C:\src 123\" D:\backup
rem 正確寫法 路徑最後面不要加 \
robocopy "C:\src 123" D:\backup
rem 正確寫法 路徑最後面加 \\
robocopy "C:\src 123\\" D:\backup
rem 路徑沒有空格,加了雙引號,報錯
robocopy "C:\" D:\backup
rem 正確寫法 路徑最後面加 \\
robocopy "C:\\" D:\backup
# PowerShell
# 路徑沒有空格,加了雙引號,OK
robocopy "C:\" D:\backup
# 一樣意思
robocopy 'C:\' D:\backup
# 一樣意思
$a = "C:\"
robocopy $a D:\backup
# 字串沒有空格,PowerShell在傳參數給robocopy時
# 就不會多加雙引號
# 字串有空格,就會加雙引號
# 最後的反斜線要寫成 \\
robocopy C:\src D:\backup
複製C:\src裡面的檔案,到D:\backup裡面
不是把C:\src資料夾複製貼上到D:\backup裡面、成為D:\backup\src
預設值:只複製一層檔案、不複製子資料夾
rem 複製所有檔案
robocopy C:\src D:\backup
rem 複製 *.txt *.jpg a.zip
robocopy C:\src D:\backup *.txt *.jpg a.zip
可以使用萬用字元
只能提供檔名,不可以帶有路徑
隱藏檔也會複製
rem 預設值:不複製子資料夾
robocopy C:\src D:\backup *.txt a.zip
robocopy C:\src D:\backup *.txt a.zip
rem 每一層
robocopy C:\src D:\backup *.txt a.zip /S
robocopy C:\src D:\backup *.txt a.zip /E
rem 兩層:來源資料夾、第一層子資料夾
robocopy C:\src D:\backup *.txt a.zip /S /LEV:2
robocopy C:\src D:\backup *.txt a.zip /E /LEV:2
/S 為了放複製過來的檔案,而建立子資料夾/E 先建立子資料夾。如果沒有檔案要放進去,就變成空資料夾
rem /XF 要排除的檔名。可以用 (路徑 + 檔名)
robocopy C:\src D:\backup *.txt /XF a* C:\src\b*
rem /XD 要排除的資料夾名。可以用 (路徑 + 資料夾名)
robocopy C:\src D:\backup *.txt /XD a* C:\src\b*
rem /MAX:n 最多 n bytes
robocopy C:\src D:\backup *.txt /MAX:10000
rem /MIN:n 至少 n bytes
robocopy C:\src D:\backup *.txt /MIN:2000
/MAXAGE
rem 最多7天。7天之內
rem 時間軸方向:7天前的時間點,往右
robocopy C:\src D:\backup *.txt /MAXAGE:7
rem 時間軸方向:往右
robocopy C:\src D:\backup *.txt /MAXAGE:20240801
/MINAGE
rem 至少7天。7天起跳
rem 時間軸方向:7天前的時間點,往左
robocopy C:\src D:\backup *.txt /MINAGE:7
rem 時間軸方向:往左
robocopy C:\src D:\backup *.txt /MINAGE:20240801
/MAXLAD:n
/MINLAD:n
(如果 n < 1900 則 n = n 日,否則 n = YYYYMMDD 日期)。
/IA:屬性 包含指定屬性的檔案
/XA:屬性 排除指定屬性的檔案
/A 選擇有A屬性的檔案
/M 選擇有A屬性的檔案。複製完之後,清除來源檔的A屬性
沒有被選擇,即排除
rem 只要有R屬性、A屬性其中一個屬性,就選擇
robocopy C:\src D:\backup *.txt /IA:RA
rem 只要有H屬性、S屬性其中一個屬性,就排除
robocopy C:\src D:\backup *.txt /XA:HS
可指定的屬性
R 唯讀
A 封存
S 系統
H 隱藏
C 已壓縮
N 未編製內容索引
E 已加密
T 暫存
O 離線
/XL 排除只有來源有的檔案
/XJ 排除 符號連結 (同時適用於檔案與目錄) 和連接點。
/XJD 排除 目錄和連接點的符號連結。
/XJF 排除 檔案的符號連結。
| 檔案類別 | 來源 | 目的地 | 備註 |
|---|---|---|---|
New新檔案 |
Yes | No | 沒有使用/XL排除 |
Lonely孤立的 |
Yes | No | 有使用/XL排除 |
Extra File其他檔案 |
No | Yes | 跟檔名有關 |
Extra Dir 其他目錄 |
No | Yes | 通常跟層數有關 |
Mismatched不相符 |
Yes(檔案) | Yes(資料夾) | 或左右情況相反 |
修改時間不同。(預設值:複製)
/XO 排除較舊的檔案
/XN 排除較新的檔案
修改時間相同、檔案大小不同。(預設值:複製)
/XC 排除變更的檔案
修改時間相同、檔案大小相同。(預設值:略過)
/IT 包含修改時間相同、檔案大小相同、屬性不相同的檔案
/IM 包含修改時間相同、檔案大小相同、屬性相同、$MFT修改時間不同的檔案
/SEC(也就是 /COPY:DATS),有 /IM 的效果
/IS 包含修改時間相同、檔案大小相同、屬性相同、$MFT修改時間相同的檔案
| 檔案類別 | 修改時間 | 檔案大小 | 屬性 | $MFT修改時間 |
|---|---|---|---|---|
Newer較新 |
來源 > 目的地 | |||
Older較舊 |
來源 < 目的地 | |||
Changed已變更 |
相同 | 不同 |
||
Tweaked已調整 |
相同 | 相同 | 不同 |
|
Modified已修改 |
相同 | 相同 | 相同 | 不同 |
Same相同 |
相同 | 相同 | 相同 | 相同 |
NTFS磁碟機的檔案時間
robocopy C:\src D:\backup *.txt
C:\src\1.txt (NTFS磁碟機)
檔案修改時間 11:27:12.9051975
D:\backup\1.txt (FAT32磁碟機、2秒精密度)
檔案修改時間 11:27:14
當一個是NTFS磁碟機,另一個是FAT32磁碟機時,
會把NTFS磁碟機的檔案時間,轉成FAT32的精密度,再進行比較
雖然實際上,兩個檔案的時間不同,
robocopy可能會認為時間相同
C:\src\1.txt (NTFS磁碟機)
檔案修改時間 11:27:12.9051975
C:\2\1.txt (NTFS磁碟機、這個檔案是從FAT32磁碟機複製過來的)
檔案修改時間 11:27:14
兩個都是NTFS磁碟機的檔案
使用 /FFT 參數,把兩者的時間,轉成FAT32的精密度,再進行比較
根據比較結果,進行複製or略過
robocopy C:\src C:\2 *.txt /FFT
rem 不管複製還是略過,都複製時間
robocopy C:\src C:\2 *.txt /FFT /TIMFIX
D - 資料
A - 屬性
T - 時間戳記
X - 略過替代資料流
S - NTFS 存取控制清單 (ACL)
O - 擁有者資訊
U - 稽核資訊
如果使用 /B 或 /ZB,則會忽略 X 旗標。
rem 預設值:複製「資料」、「屬性」、「時間戳記」
robocopy C:\src D:\backup
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPY:DAT
rem 複製「資料」、「屬性」、「時間戳記」、「權限」
robocopy C:\src D:\backup /COPY:DATS
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPY:SEC
rem 複製全部內容
robocopy C:\src D:\backup /COPY:DATSOU
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPYALL
rem 只更新時間 (同名檔案需要存在。否則略過)
robocopy C:\src D:\backup /COPY:T
rem 只更新權限 (同名檔案需要存在。否則略過)
robocopy C:\src D:\backup /COPY:S
rem 用瀏覽器下載的檔案,有替代資料流 Zone.Identifier
rem 使用 X 跳過、不複製替代資料流
robocopy C:\src D:\backup /COPY:DATX
D - 資料
A - 屬性
T - 時間戳記
E - 擴充屬性
X - 略過替代資料流
此選項的預設值為 DA (資料和屬性)。
/a+:[RASHCNET]
/a-:[RASHCNET]
R - 唯讀
A - 封存
S - 系統
H - 隱藏
C - 已壓縮
N - 未編製內容索引
E - 已加密
T - 暫存
O - 離線 (移除only)
rem 預設值:複製symlink的目標,而不是symlink本身
robocopy C:\src D:\backup
rem 複製symlink本身。需要系統管理員權限
robocopy C:\src D:\backup /SL
使用/SECFIX時,指定要複製哪些內容
稀疏檔案/SPARSE:<y|n>
是否保留檔案的疏鬆狀態
預設值:是
/PURGE 刪除目的地多的檔案、資料夾
目的地多的檔案只跟選擇處理的檔名有關
跟檔案大小、日期無關
rem 刪除目的地多的檔案,而且,檔案名稱a*
robocopy C:\src D:\backup a* /PURGE
目的地多的資料夾刪除C:\src\a1 資料夾
rem 可以刪除,資料夾名稱a1符合a*
robocopy C:\src D:\backup a* /PURGE
rem 沒反應
robocopy C:\src D:\backup a* /PURGE /S /LEV:1
rem 可以刪除,跟a*無關
robocopy C:\src D:\backup a* /PURGE /S /LEV:2
rem 可以刪除,指定x* 證明跟資料夾名稱無關
rem 跟資料夾層數 /LEV 有關
robocopy C:\src D:\backup x* /PURGE /S /LEV:2
rem 可以刪除
robocopy C:\src D:\backup /PURGE /S /LEV:2
rem 可以刪除。刪除每一層「多的資料夾」
robocopy C:\src D:\backup /PURGE /S
/MOV 複製來源檔之後,刪除來源檔
rem 同名檔案相同時,略過、不複製,不會刪除來源檔
rem 使用 /IS 參數,同名檔案相同時,也進行複製,就會刪除來源檔
rocobopy C:\src D:\backup /IS /MOV
rem 只更新時間,也會刪除來源檔
rem 只對「存在、而且沒有被略過」的目的地檔案,更新時間
rocobopy C:\src D:\backup /COPY:T /MOV
/MOVE 複製來源檔之後
如果資料夾本來就是空的,也會刪除資料夾
如果資料夾裡面還有檔案留著,
就不會刪除資料夾
經過測試
子資料夾可以被刪除/MIR (等於 /E /PURGE)複製各層檔案刪除「來源沒有、目的地有」的檔案
rem 來源資料夾(一層)
robocopy C:\src D:\backup /PURGE
rem 每層資料夾
robocopy C:\src D:\backup /E /PURGE
rem 每層資料夾
robocopy C:\src D:\backup /MIR
來源沒有、目的地有的檔案,不進行複製rem 來源資料夾(一層)
robocopy C:\src D:\backup /PURGE /NOCOPY
rem 每層資料夾
robocopy C:\src D:\backup /E /PURGE /NOCOPY
rem 每層資料夾
robocopy C:\src D:\backup /MIR /NOCOPY
rem 排除「來源有、目的地沒有」的檔案
robocopy C:\src D:\backup *.txt /XL
robocopy C:\src D:\backup /E /NOCOPY
robocopy C:\src D:\backup *.txt /CREATE
當目的地檔案不存在時,建立空檔案
修改時間一樣,但是,檔案大小為0
當目的地檔案存在時,略過、不處理
7天以外的檔案rem 建立空資料夾
md D:\empty
rem 建立空檔案(7天以外)
robocopy C:\src D:\empty /MINAGE:7 /CREATE
rem 複製時間後,刪除來源檔
robocopy C:\src D:\empty /MINAGE:7 /COPY:T /MOV
rem 建立空資料夾
md D:\empty
robocopy D:\empty C:\src /MIR
/MT:n 以 n 個執行緒執行多執行緒複製 (預設值為 8)
n 必須至少為 1,但不可以大於 128
此選項與 /IPG 和 /EFSRAW 選項不相容
請使用 /LOG 選項重新導向輸出,以獲得更好的效能
/R:n 失敗複本的重試次數: 預設值是 1 百萬次
/W:n 重試之間等候時間: 預設值是 30 秒
預設值太大,調小一點
時間還沒到,等待
時間到,開始複製/RH 時間範圍
robocopy C:\src D:\backup /RH:1700-0900
執行時間還沒有到,會出現以下訊息
> 小時 : 暫停時間從 10:00 到 17:00...
/PF 每個檔案複製前,都檢查是否在時間範圍內
robocopy C:\src D:\backup /RH:1700-0900 /PF
/MON:n 監視來源; 看到 n 個字元以上時再次執行。/MOT:m 監視來源; m 分鐘後如果變更,則再次執行。
/LFSM 在低可用空間模式中運作
當複製導致可用空間低於下限值時,robocopy 就會暫停。
沒有指定下限值時,預設值:10%
與 /MT 和 /EFSRAW 不相容
rem X:\ 是 VHD掛載的NTFS磁碟機
rem 複製到500MB的檔案到 X:\ (可用空間:984MB)
robocopy .\ X:\ 1.mp4 /LFSM:700M
rem 複製了285MB的時候,出現以下訊息
rem 等候可用空間;可用空間 699.36 m
rem 等候 30 秒... 正在重試...
如果把X:格式化成FAT32
進行複製時,不會暫停
出現以下訊息警告:無法查詢磁碟區空間; /LFSM 不會監視不足的可用空間。
/B 在備份模式複製檔案
需要這兩個備份權限SeBackupPrivilege、SeRestorePrivilege
robocopy不能複製使用中的檔案
如果目的地檔案沒有存在,會報錯
如果目的地檔案已經存在,不會報錯,只會複製時間,不複製內容
/Z 在可重新啟動模式複製檔案/IPG:n 慢速線路可用頻寬,封包之間的差距 (毫秒)/TBD 等候共用名稱 (重試錯誤 67)/COMPRESS 在檔案傳輸期間要求網路壓縮 (如適用)
儘量使用UNC path,不要使用掛載的磁碟機代號
/L 只列出清單。不做實際的寫入動作。
三個部份/NJH關閉顯示)/TS 檔案時間戳記/FP 檔案的完整路徑名稱/NS 不記錄檔案大小/NC 不記錄檔案類型/NFL 不記錄檔案名稱/NDL 不記錄目錄名稱/NP 不顯示複製百分比/ETA 顯示複製的檔案預估到達時間/NJS關閉顯示)set FileOnly=/NJH /NJS /NC /NS /NDL
rem mismatched(不符合)的檔案仍然會被列出來
rem 以下:沒有子資料夾的情況
rem 左邊only:排除兩邊/XO /XN、排除右邊/XX
robocopy C:\src D:\backup /L %FileOnly% /XO /XN /XX
rem 兩邊都有的:排除左邊/XL、包含兩邊/IS /IT /IM、排除右邊/XX
robocopy C:\src D:\backup /L %FileOnly% /XL /IS /IT /IM /XX
rem 右邊only:排除左邊/XL、排除兩邊/XO /XN
robocopy C:\src D:\backup /L %FileOnly% /XL /XO /XN
/UNICODE 正確顯示unicode,而不是顯示成問號
/LOG:file (覆寫)/LOG+:file (附加)/UNILOG:file (覆寫)/UNILOG+:file (附加)
/TEE 輸出至主控台視窗,以及記錄檔
複製設定rem 把複製設定 (/SAVE前面的參數內容)
rem 儲存到job1.RCJ (ANSI編碼)
rem 如果不使用 /QUIT 仍然會執行命令
robocopy C:\src D:\backup *.txt *.jpg /SAVE:job1 /QUIT
rem 可以不指定來源、目的地
robocopy *.txt *.jpg /SAVE:job1 /QUIT
rem 使用job1.RCJ
robocopy /JOB:job1
rem 使用job1.RCJ(如果設定檔裡沒有來源、目的地)
robocopy C:\src D:\backup /JOB:job1
| code | 意思 |
|---|---|
| 16 | 不能複製任何檔案(語法錯誤、權限不足) |
| 8 | 有些檔案複製失敗 |
| 4 | 不符合:相同名稱,一邊是檔案,另一邊是資料夾 |
| 2 | 目的地:多的檔案 |
| 1 | 有檔案被複製 |
| 0 | 沒有檔案被複製,也沒有錯誤。資料夾已經同步 |
| code | 意思 |
|---|---|
| 16 | 嚴重錯誤 |
| 15 | 失敗 不符 多的 複製 |
| 14 | 失敗 不符 多的 |
| 13 | 失敗 不符 複製 |
| 12 | 失敗 不符 |
| 11 | 失敗 多的 複製 |
| 10 | 失敗 多的 |
| 9 | 失敗 複製 |
| 8 | 失敗 |
| 7 | 不符 多的 複製 |
| 6 | 不符 多的 |
| 5 | 不符 複製 |
| 4 | 不符 |
| 3 | 多的 複製 |
| 2 | 多的 |
| 1 | 複製 |
| 0 | 同步 |
exit code >= 8 有檔案複製失敗
取得exit code
rem cmd
echo %errorlevel%
# PowerShell
echo $LASTEXITCODE
windows - Does changing a file's attribute also change its time stamps? - Super User
Understanding NTFS Timestamps (Timeline Analysis) | by Dean | Medium
backup - how to copy files in use with robocopy? - Stack Overflow